# 第一阶段：构建可执行文件（使用完整Go环境）
FROM golang:1.24.4-alpine AS builder

# 使用国内镜像源并安装依赖
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
    apk update && \
    apk add --no-cache tzdata git grep gcc musl-dev ca-certificates

# 设置时区和环境
ENV TZ=Asia/Shanghai \
    GOPROXY=https://goproxy.cn,direct \
    GO111MODULE=on \
    CGO_ENABLED=0 \
    GOOS=linux

# 设置非root用户（安全最佳实践）
RUN adduser -D -g '' myuser

# 设置工作目录
WORKDIR /app

# 创建logs与config目录并赋权
RUN mkdir -p /app/logs /app/config && chown -R myuser:myuser /app

COPY go.mod go.sum ./
RUN go mod download

# 复制项目代码并编译
COPY . .

RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -v -ldflags="-w -s" -o /app/ddd

# 第二阶段：运行可执行文件（使用极简镜像）
FROM alpine:3.22

RUN adduser -D -g '' myuser

# 从构建阶段复制可执行文件与配置文件
COPY --from=builder /app/ddd /usr/local/bin/ddd
COPY --from=builder /app/config /app/config

RUN chown -R myuser:myuser /app

USER myuser

# 定义启动命令
CMD ["/usr/local/bin/ddd"]